import banco.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;

public class Servidor {
     
    public static void main(String args[]){
        try{
      // Cria e inicializa o ORB
      ORB orb = ORB.init(args, null);

      // Cria a implementacao e registra no ORB
      ServidorAutoCaixaImplementacao impl = new ServidorAutoCaixaImplementacao();

      // Ativa o POA
      POA rootpoa = POAHelper.narrow(
        orb.resolve_initial_references("RootPOA"));
      rootpoa.the_POAManager().activate();

      // Pega a referencia do servidor
      org.omg.CORBA.Object ref = 
        rootpoa.servant_to_reference(impl);
      caixa_eletronico href = caixa_eletronicoHelper.narrow(ref);
	  
      // Obtem uma referencia para o servidor de nomes
      org.omg.CORBA.Object objRef = 
        orb.resolve_initial_references("NameService");
      NamingContextExt ncRef = 
        NamingContextExtHelper.narrow(objRef);

      // Registra o servidor no servico de nomes
      String name = "CaixaEletronico";
      NameComponent path[] = ncRef.to_name( name );
      ncRef.rebind(path, href);

      System.out.println("Servidor aguardando requisicoes ....");

      // Aguarda chamadas dos clientes
      orb.run();
    } catch (Exception e) {
        System.err.println("ERRO: " + e);
        e.printStackTrace(System.out);
    }
    System.out.println("Encerrando o Servidor.");
  }
    
}
